/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Proxy;

import ObjetoDominio.Archivo;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;

/**
 *Metodo que transforma un xml en archivo y viceversa
 * @author familia
 */
public class ProxyArchivo {

    /**
     * Metodo que transforma una lista de archivo en xml
     * @param archivos lista con los datos a transformar en xml
     * @return xml en string
     */
    public static String TransformarListaArchivoXml(List<Archivo> archivos){
       
        try {
            Document docNuevo = new Document();  
            Element eRaiz = new Element("raiz") {}; 
            for (Archivo archivo : archivos) {
                Element eMensaje = new Element("archivo");
                Element eNombre = new Element("nombre");
                Element eTamaño = new Element("tamaño");
                eTamaño.setText(String.valueOf(archivo.getTamaño()));
                eNombre.setText(archivo.getNombre());
                eMensaje.addContent(eNombre);
                eMensaje.addContent(eTamaño);
                eRaiz.addContent(eMensaje);
            }
            docNuevo.addContent(eRaiz);  
            Format format = Format.getPrettyFormat();  
            XMLOutputter xmloutputter = new XMLOutputter(format);  
            String docNuevoStr = xmloutputter.outputString(docNuevo); 
            return docNuevoStr;

            } catch (Exception e) {  
            return "";
        } 
    }

    /**
     * Metodo que transforma un xml en una lista de archivo
     * @param archivos lista que posee todos los datos de los archivos
     * @return lista de archivo
     */
    public static List<Archivo> ObtenerListaArchivoXml(String xml){
       
        try {
            List<Archivo> retorno = new ArrayList<Archivo>();
            SAXBuilder builder = new SAXBuilder();
            Document result = builder.build(new StringReader(xml));
            Element raiz = result.getRootElement();
            List<Element> hijosRaiz = raiz.getChildren("archivo");
            for (Element elemento : hijosRaiz) {
                Archivo archivo = new Archivo();
                archivo.setNombre(elemento.getChild("nombre").getValue());
                archivo.setTamaño(Long.parseLong(                        
                        elemento.getChild("tamaño").getValue()));
                retorno.add(archivo);
            }
            return retorno;

            } catch (Exception e) {  
                System.out.println(e);
            return null;
        } 
    }

    /**
     * Metodo que transforma un xml en objeto de tipo archivo
     * @param xml datos en xml del archivo
     * @return objeto archivo con todos los datos
     */
    public static Archivo ObtenerArchivoXml(String xml){

        try {
            Archivo archivo = new Archivo();
            SAXBuilder builder = new SAXBuilder();
            Document result = builder.build(new StringReader(xml));
            Element raiz = result.getRootElement();
            Element hijosRaiz = raiz.getChild("archivo");
                archivo.setNombre(hijosRaiz.getChild("nombre").getValue());
                archivo.setTamaño(Long.parseLong(
                        hijosRaiz.getChild("tamaño").getValue()));
            return archivo;

            } catch (Exception e) {
            return null;
        }
    }
}
